package com.darren.archive.mapper;

import com.darren.archive.model.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 系统用户表
 * @Author: 周金涛
 * @Date: 2019-09-09 12:38:41
 * Table: sys_user
 */

@Mapper
public interface SysUserMapper {

    /**
     * 新增 记录
     *
     * @param record
     * @return
     */
    int insert(SysUser record);


    /**
     * 批量新增记录
     *
     * @param records
     * @return
     */
    int batchInsert(List<SysUser> records);


    /**
     * 根据主键id 删除数据
     *
     * @param id         主键id
     * @param modifiedBy 删除此数据的用户id
     * @return
     */
    int deleteByPrimaryKey(@Param("id") Long id,
                           @Param("modifiedBy") Long modifiedBy);


    /**
     * 根据用户帐号 删除数据
     *
     * @param userAccount 要删除的用户帐号
     * @param modifiedBy  删除此数据的用户id
     * @return
     */
    int deleteByUserAccount(@Param("userAccount") String userAccount,
                            @Param("modifiedBy") Long modifiedBy);

    /**
     * 根据主键修改数据记录
     *
     * @param record
     * @return
     */
    int updateByPrimaryKey(SysUser record);


    /**
     * 启用用户
     *
     * @param modifiedBy 操作此数据的用户id
     * @return
     */
    int enableUser(@Param("modifiedBy") Long modifiedBy);

    /**
     * 禁用用户
     *
     * @param modifiedBy 操作此数据的用户id
     * @return
     */
    int disableUser(@Param("modifiedBy") Long modifiedBy);


    /**
     * 根据主键查询数据记录
     *
     * @param id
     * @return
     */
    SysUser selectByPrimaryKey(Long id);


    /**
     * 根据用户帐号查询用户
     *
     * @param userAccount
     * @return
     */
    SysUser selectByUserAccount(@Param("userAccount") String userAccount);


    /**
     * 判断指定的用户帐号是否存在
     *
     * @param userAccount
     * @return
     */
    Boolean existsUserAccount(@Param("userAccount") String userAccount);


    /**
     * 判断手机号是否存在,不包含已删除用户(is_deleted = 1)
     *
     * @param id     当前用户id，新增时是空，修改时为要修改的用户的id
     * @param mobile 用户手机号
     * @return
     */
    Boolean existsUserMobile(@Param("id") Long id,
                             @Param("mobile") String mobile);

    /**
     * 判断邮箱是否存在,不包含已删除用户(is_deleted = 1)
     *
     * @param id    当前用户id，新增时是空，修改时为要修改的用户的id
     * @param email 用户邮箱
     * @return
     */
    Boolean existsUserEmail(@Param("id") Long id,
                            @Param("email") String email);

    /**
     * 根据用户帐号或手机号或邮箱查询用户
     *
     * @param userAccountOrMobileOrEmail   用户帐号或手机号或邮箱
     * @param enable                       是否为启用用户
     * @return                              用户信息
     */
    SysUser selectByUserAccountOrMobileOrEmail(@Param("userAccountOrMobileOrEmail") String userAccountOrMobileOrEmail,
                                               @Param("enable") Boolean enable);


    /**
     * 根据用户部门、用户帐号、用户姓名、手机号、邮箱查询用户
     *
     * @param departmentId     用户部门
     * @param userAccount      用户帐号
     * @param userName         用户姓名
     * @param mobile           手机号
     * @param email            邮箱
     * @return                 用户信息
     */
    List<SysUser> selectByConditions(@Param("departmentId") Long departmentId,
                                    @Param("userAccount") String userAccount,
                                    @Param("userName") String userName,
                                    @Param("mobile") String mobile,
                                    @Param("email") String email);


}